class Person(object):
    age_range = [0, 120]
    gender_range = ["男", "女"]

    def __init__(self, name, age, gender):
        self.__name = name  # 私有属性，不能通过 对象.name 来访问或修改
        self._age = age  # 被保护的属性，口头约定，可以通过 对象.age 来访问或修改,推荐
        self.__gender = gender

    def _show(self):  # __show()则会被隐藏，直接调用 mia.__show() 会报错
        print(self.__dict__)  # self.__dict__ 可以访问 _ 和 __ 的所有属性和方法
        print(dir(self))  # 打印对象的所有属性和方法，列表 [' ', ' ', ... ]

    def get_name(self):
        return self.__name

    def get_age(self):
        return self._age

    def get_gender(self):
        return self.__gender

    def set_name(self, name):
        self.__name = name

    def set_age(self, age):
        if Person.age_range[0] < age < Person.age_range[1]:
            self._age = age
        else:
            raise Exception("年龄异常")

    def set_gender(self, gender):
        if gender in Person.gender_range:
            self.__gender = gender
        else:
            raise Exception("性别异常")


mia = Person("mia", 25, "女")
mia._show()
mia.set_age(55)
mia._show()
